package cn.iocoder.yudao.module.worker.service.clerklevel;

import java.util.*;
import javax.validation.*;

import cn.iocoder.yudao.module.worker.controller.admin.category.vo.CategoryRespVO;
import cn.iocoder.yudao.module.worker.controller.admin.clerklevel.vo.*;
import cn.iocoder.yudao.module.worker.controller.app.clerklevel.vo.AppClerkLevelPageReqVO;
import cn.iocoder.yudao.module.worker.controller.app.clerklevel.vo.AppClerkLevelSaveReqVO;
import cn.iocoder.yudao.module.worker.dal.dataobject.clerklevel.ClerkLevelDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 店员等级 Service 接口
 *
 * @author Jerry
 */
public interface ClerkLevelService {

    /**
     * 创建店员等级
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createClerkLevel(@Valid ClerkLevelSaveReqVO createReqVO);

    /**
     * 更新店员等级
     *
     * @param updateReqVO 更新信息
     */
    void updateClerkLevel(@Valid ClerkLevelSaveReqVO updateReqVO);

    /**
     * 删除店员等级
     *
     * @param id 编号
     */
    void deleteClerkLevel(Long id);

    /**
     * 获得店员等级
     *
     * @param id 编号
     * @return 店员等级
     */
    ClerkLevelDO getClerkLevel(Long id);

    /**
     * 获得店员等级分页
     *
     * @param pageReqVO 分页查询
     * @return 店员等级分页
     */
    PageResult<ClerkLevelDO> getClerkLevelPage(ClerkLevelPageReqVO pageReqVO);

    /**
     * 创建店员等级
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createClerkLevel(@Valid AppClerkLevelSaveReqVO createReqVO);

    /**
     * 更新店员等级
     *
     * @param updateReqVO 更新信息
     */
    void updateClerkLevel(@Valid AppClerkLevelSaveReqVO updateReqVO);

    /**
     * 获得店员等级分页
     *
     * @param pageReqVO 分页查询
     * @return 店员等级分页
     */
    PageResult<ClerkLevelDO> getClerkLevelPage(AppClerkLevelPageReqVO pageReqVO);

    List<CategoryRespVO> getClerkLevelPrice(Long id);

    void saveClerkLevelPrice(ClerkLevelSaveReqVO updateReqVO);

    List<ClerkLevelDO> getClerkLevelList();

    List<ClerkLevelDO> getClerkLevelListByIds(List<Long> ids);

    void updateClerkLevelStatus(Long id, Boolean status);
}